//index.ts
import { createAlova } from 'alova'
import GlobalFetch from 'alova/GlobalFetch'
import VueHook from 'alova/vue'
 
export const AlovaInstance = createAlova({
  baseURL: 'https://apifoxmock.com/m1/4131337-0-default/api/v2',
  statesHook: VueHook,
    // 请求适配器，这里我们使用fetch请求适配器
  requestAdapter: GlobalFetch(),

  // 设置全局的请求拦截器，与axios相似
  beforeRequest() {},
  // beforeRequest(config) {
  //   // 假设我们需要添加token到请求头
  //   config.headers.token = 'token';
  // },
  // 响应拦截器，也与axios类似
 // 响应拦截器，也与axios类似
//  async responsed(response){
//     const json = await response.json();
//     if (json.code !== 200) {
//       // 这边抛出错误时，将会进入请求失败拦截器内
//       throw new Error(json.message);
//     }
//     return json.data;
//   },
    responded: {
      // 请求成功的拦截器
      // 当使用GlobalFetch请求适配器时，第一个参数接收Response对象
      // 第二个参数为当前请求的method实例，你可以用它同步请求前后的配置信息
      onSuccess: async (response, method) => {
        if (response.status >= 400) {
          throw new Error(response.statusText);
        }
        const json = await response.json();
        if (json.code !== 200) {
          // 抛出错误或返回reject状态的Promise实例时，此请求将抛出错误
          throw new Error(json.message);
        }

        // 解析的响应数据将传给method实例的transformData钩子函数，这些函数将在后续讲解
        return json.data;
      },

      // 请求失败的拦截器
      // 请求错误时将会进入该拦截器。
      // 第二个参数为当前请求的method实例，你可以用它同步请求前后的配置信息
      onError: (error, method) => {
        alert(error.message);
      },

      // 请求完成的拦截器
      // 当你需要在请求不论是成功、失败、还是命中缓存都需要执行的逻辑时，可以在创建alova实例时指定全局的`onComplete`拦截器，例如关闭请求 loading 状态。
      // 接收当前请求的method实例
      onComplete: async method => {
        // 处理请求完成逻辑
      }
}
});
